package com.gitee.feizns.quickstart.web.spring.boot.autoconfigure.restful;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * restful api
 * @author feizns
 * @since 2023/07/10
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RestApi {

    /**
     * 前缀
     * @return {@link String}
     */
    String prefix() default "";

    /**
     * 方法
     * @return {@link Method[]}
     */
    Method[] methods() default {
        Method.Page,
        Method.GetById,
        Method.Create,
        Method.DeleteById,
        Method.Delete,
        Method.PutById,
        Method.Put,
        Method.PatchById,
        Method.Patch
    };

    /**
     * 方法
     * @author feizns
     * @since 2023/07/11
     */
    enum Method {

        /**
         * 创建和批量创建
         */
        Create,

        /**
         * 删除通过编号（路径参数匹配）
         */
        DeleteById,

        /**
         * 批量删除（请求体作为查询参数）
         */
        Delete,

        /**
         * 新增或替换
         */
        PutById,

        /**
         * 批量新增或替换
         */
        Put,

        /**
         * 部分更新
         */
        PatchById,

        /**
         * 部分更新
         */
        Patch,

        /**
         * 根据编号获取
         */
        GetById,

        /**
         * 分页
         */
        Page;

    }

}
